// 引入axios
import axios from 'axios'
// 注意：在vue组件中，通过this可以代表当前组件 如果在一个js文件中，this是无法代表某一个组件的
// 如果在一个vue组件中。可以通过this.$store直接访问store对象，但是如果在一个普通模块（js），没有this，需要手动的导入store
import store from '@/store/index'
import router from '@/router'
// 引入提示框组件
import { Toast } from 'vant'
// 创建request实例
const request = axios.create({
  // 配置根路径和超时时间
  baseURL: 'http://toutiao-app.itheima.net',
  timeout: 5000
})

// 添加请求拦截器
request.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 赋值给token  从vuex中找token，
  const token = store.state.user.token.token
  // 如果有token证明登录了，之后的请求都可以带上token
  if (token) {
    config.headers.Authorization = 'Bearer ' + token
  }
  // 请求信息 config
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response.data // 增加data，返回的结果就很干净
}, function (error) {
  // 对响应错误做点什么
  console.dir(error)
  // 如果等于401就是token失效,1.删除旧token，2.跳回登录页，3.给用户提示
  if (error.response.status === 401) {
    // console.log(router.currentRoute) currentRoute代表当前路由
    store.commit('user/removeToken')
    router.push({
      path: '/login',
      query: {
        back: router.currentRoute.path
      }
    })
    Toast.fail('用户登录信息失效了，请重新登录')
  } else {
    return Promise.reject(error)
  }
})
// 导出
export default request
